package com.business.dashboard.service;

import com.business.dashboard.entity.BusinessPlan;

import java.util.List;

/**
 * 商业计划书服务接口
 * 
 * @author Claude
 * @since 2025-07-06
 */
public interface BusinessPlanService {

    /**
     * 创建商业计划书
     */
    BusinessPlan createPlan(BusinessPlan plan);

    /**
     * 更新商业计划书
     */
    BusinessPlan updatePlan(BusinessPlan plan);

    /**
     * 根据ID获取商业计划书
     */
    BusinessPlan getPlanById(Long id);

    /**
     * 删除商业计划书
     */
    boolean deletePlan(Long id);

    /**
     * 获取商业计划书列表（分页）
     */
    List<BusinessPlan> getPlanList(int page, int size, String keyword, String status, String industry, Long userId);

    /**
     * 获取商业计划书总数
     */
    long getPlanCount();

    /**
     * 根据状态获取商业计划书数量
     */
    int getPlanCountByStatus(String status);

    /**
     * 根据用户ID获取商业计划书数量
     */
    int getPlanCountByUserId(Long userId);

    /**
     * 发布商业计划书
     */
    boolean publishPlan(Long id);

    /**
     * 完成商业计划书
     */
    boolean completePlan(Long id);

    /**
     * 归档商业计划书
     */
    boolean archivePlan(Long id);

    /**
     * 生成分享码
     */
    String generateShareCode(Long id);

    /**
     * 根据分享码获取商业计划书
     */
    BusinessPlan getPlanByShareCode(String shareCode);

    /**
     * 更新查看次数
     */
    boolean updateViewCount(Long id);

    /**
     * 更新下载次数
     */
    boolean updateDownloadCount(Long id);

    /**
     * 获取热门商业计划书列表
     */
    List<BusinessPlan> getPopularPlans(int limit);

    /**
     * 生成商业计划书文件
     */
    String generatePlanFile(Long id, String format);

    /**
     * 复制商业计划书
     */
    BusinessPlan duplicatePlan(Long id, Long newUserId);

    /**
     * 获取所有商业计划书（管理员用）
     */
    List<BusinessPlan> getAllBusinessPlans();

    /**
     * 创建商业计划书（管理员用）
     */
    BusinessPlan createBusinessPlan(BusinessPlan plan);

    /**
     * 更新商业计划书（管理员用）
     */
    BusinessPlan updateBusinessPlan(BusinessPlan plan);

    /**
     * 删除商业计划书（管理员用）
     */
    boolean deleteBusinessPlan(Long id);

    /**
     * 根据ID获取商业计划书（管理员用）
     */
    BusinessPlan getBusinessPlanById(Long id);

    /**
     * 审核商业计划书
     */
    boolean reviewBusinessPlan(Long id, String status, String comment, Long adminId);

    /**
     * 批量更新商业计划书状态
     */
    boolean batchUpdateStatus(List<Long> ids, String status);

    /**
     * 导出商业计划书为PDF
     */
    String exportToPdf(Long id);

    /**
     * 获取商业计划书统计数据
     */
    Object getBusinessPlanStats();

    /**
     * 获取热门行业分析
     */
    Object getTrendingIndustries();

    /**
     * 获取商业计划书总数
     */
    long getBusinessPlanCount();

    /**
     * 获取用户的商业计划书列表
     */
    List<BusinessPlan> getUserPlans(Long userId, int page, int size);
}